# 19 №47223
# 1 куча камней (неудачный ход проигравшего)
# m - предельное количество ходов, с - текущий ход
# данная функция определяет возможность выигрыша за m ходов
def f(s,c,m):
    #если игра окончена то текущий ход должен иеметь четность заданного кол-ва ходов
    if s>=129:
        return c%2 == m%2
    if c==m:
        return 0
    h = [f(s+1, c+1,m),f(s*2, c+1,m)]
    return any(h) if (c+1)%2 == m%2 else any(h)

for s in range(1,129):
    for m in range(1,5):
        if f(s,0,m):
            if m==2:
                print(s,m)
            break
#ответ 64

-----------------

# 20 №47224
# 1 куча камней (неудачный ход проигравшего)
# m - предельное количество ходов, с - текущий ход
# данная функция определяет возможность выигрыша за m ходов
def f(s,c,m):
    #если игра окончена то текущий ход должен иеметь четность заданного кол-ва ходов
    if s>=129:
        return c%2 == m%2
    if c==m:
        return 0
    h = [f(s+1, c+1,m),f(s*2, c+1,m)]
    return any(h) if (c+1)%2 == m%2 else all(h)

for s in range(1,129):
    for m in range(1,5):
        if f(s,0,m):
            if m==3:
                print(s,m)
            break
#ответ 32 63

---------------------------

# 21 №47225
# 1 куча камней (неудачный ход проигравшего)
# m - предельное количество ходов, с - текущий ход
# данная функция определяет возможность выигрыша за m ходов
def f(s,c,m):
    #если игра окончена то текущий ход должен иеметь четность заданного кол-ва ходов
    if s>=129:
        return c%2 == m%2
    if c==m:
        return 0
    h = [f(s+1, c+1,m),f(s*2, c+1,m)]
    return any(h) if (c+1)%2 == m%2 else all(h)

for s in range(1,129):
    for m in range(1,5):
        if f(s,0,m):
            if m==4:
                print(s,m)
            break
#ответ 62

